CL
programação

{Ajuda} Adaptar código para TFS 0.4

Por Clarym, 23 de mar. de 2016 em Programação

tfs 0.4
18
5k
ClarymC
23 de março de 2016 às 19:21

Eai galera.

 

Então, achei um código super útil aqui no fórum, mas ele é pra TFS 0.3.6 e eu fui compilar no TFS 0.4 e deu erro, então gostaria de que alguém me ajudasse a adaptar ele. O código é do henriqueberro e aqui está o tópico dele: link

 

Mas pra facilitar aqui está o código:

 

em player.cpp, procure a função:

uint32_t Player::getAttackSpeed()

e​ substituía ela toda por:

uint32_t Player::getAttackSpeed()
{
int32_t weaponAttackSpeed = 0;
int32_t minimumAttackSpeed = 500;

Item* weapon = getWeapon();

if(weapon && weapon->getAttackSpeed() != 0)
    weaponAttackSpeed = floor ((int)weapon->getAttackSpeed());

// FORMULA
int32_t attackSpeed = vocation->getAttackSpeed() - (getSkill(SKILL_CLUB, SKILL_LEVEL) * 20) - weaponAttackSpeed;
    
// CHECA A VELOCIDADE MÍNIMA
if (attackSpeed && attackSpeed < minimumAttackSpeed)
   return minimumAttackSpeed;

return attackSpeed;
}

No tópico diz que se adicionarmos a tag <attribute key="attackspeed" value="X"/> em algum item, o mesmo vai adicionar mais velocidade ao ataque, se eu colocar essa tag e um anel vai funcionar? Igual a tag "increaseMagicPercent"?

Editado Março 23 por Clarym

Yan LiimaY
23 de março de 2016 às 19:57

Tente assim:

uint32_t Player::getAttackSpeed() const
{
int32_t weaponAttackSpeed = 0;
int32_t minimumAttackSpeed = 500;

return ((weapon && weapon->getAttackSpeed() != 0) ? weapon->getAttackSpeed() : (vocation->getAttackSpeed() - getPlayer()->getExtraAttackSpeed() / std::max((size_t)1, getWeapons().size())));
// FORMULA
int32_t attackSpeed = vocation->getAttackSpeed() - (getSkill(SKILL_CLUB, SKILL_LEVEL) * 20) - weaponAttackSpeed;
    
// CHECA A VELOCIDADE MÍNIMA
if (attackSpeed && attackSpeed < minimumAttackSpeed)
   return minimumAttackSpeed;

return attackSpeed;
}

Só não sei se iria funcionar 100% então tu vai ter que testar...


Na verdade acho que nem vai funcionar kkk

 

ClarymC
23 de março de 2016 às 21:12

Tente assim:

uint32_t Player::getAttackSpeed() const
{
int32_t weaponAttackSpeed = 0;
int32_t minimumAttackSpeed = 500;

return ((weapon && weapon->getAttackSpeed() != 0) ? weapon->getAttackSpeed() : (vocation->getAttackSpeed() - getPlayer()->getExtraAttackSpeed() / std::max((size_t)1, getWeapons().size())));
// FORMULA
int32_t attackSpeed = vocation->getAttackSpeed() - (getSkill(SKILL_CLUB, SKILL_LEVEL) * 20) - weaponAttackSpeed;
    
// CHECA A VELOCIDADE MÍNIMA
if (attackSpeed && attackSpeed < minimumAttackSpeed)
   return minimumAttackSpeed;

return attackSpeed;
}

Só não sei se iria funcionar 100% então tu vai ter que testar...

Na verdade acho que nem vai funcionar kkk

 

 

É, deu erro kkk

 

D:\Source\player.cpp 'const class Player' has no member named 'getExtraAttackSpeed'​

D:\Source\player.cpp *** [Obj/player.o] Error 1

Yan LiimaY
23 de março de 2016 às 21:25

 

É, deu erro kkk

 

D:\Source\player.cpp 'const class Player' has no member named 'getExtraAttackSpeed'​

D:\Source\player.cpp *** [Obj/player.o] Error 1

 

kkk tentei agora pouco no meu e compilou, mais acho que não iria funcionar não...

 

Acho que daria para adaptar não, dar deve dá sim, mais aconselho tu ir atrás do cara que fez essa função ai.

ClarymC
23 de março de 2016 às 21:41

 

kkk tentei agora pouco no meu e compilou, mais acho que não iria funcionar não...

 

Acho que daria para adaptar não, dar deve dá sim, mais aconselho tu ir atrás do cara que fez essa função ai.

 

Eu contatei ele, mas até agora nada... Vamos ver se sai algo

SkullsS
23 de março de 2016 às 21:50

A source do 0.4 que você está utilizando ajudaria.


Outra coisa, qual erro deu na primeira tentativa?


E sem querer te desanimar, mas já desanimando, tenho convicção de que esse código não deve ser funcional.

O TFS possui uma limitação muito chata relacionada a attack speed que limita sua manipulação à casa de segundos, imposta pelo mark propositalmente.

Porém, há uma pequena correção (pelo menos por 1.2) que permite que o attack speed seja manipulado na casa de milisegundos.

Editado Março 23 por Skulls

ClarymC
23 de março de 2016 às 21:52

A source do 0.4 que você está utilizando ajudaria.

Outra coisa, qual erro deu na primeira tentativa?

 

É a distro TFS 0.4 rev 3884 que eu baixei em outkro fórutkm mas acho que não posso linkar aqui então eu coloquei no dropbox: link

 

os erros:

4256 \Source\player.cpp prototype for 'uint32_t Player::getAttackSpeed()' does not match any in class 'Player' 
710 \Source\player.h uint32_t Player::getAttackSpeed() const
 710 \Bony TheForgotten - Source\player.h *** [Obj/player.o] Error 1

SkullsS
23 de março de 2016 às 21:54

Só repetindo pq vc nao viu:

E sem querer te desanimar, mas já desanimando, tenho convicção de que esse código não deve ser funcional.

O TFS possui uma limitação muito chata relacionada a attack speed que limita sua manipulação à casa de segundos, imposta pelo mark propositalmente.

Porém, há uma pequena correção (pelo menos por 1.2) que permite que o attack speed seja manipulado na casa de milisegundos.

 

Em todo caso, darei uma olhada.

ClarymC
23 de março de 2016 às 21:55

 

 

E sem querer te desanimar, mas já desanimando, tenho convicção de que esse código não deve ser funcional. O TFS possui uma limitação muito chata relacionada a attack speed que limita sua manipulação à casa de segundos, imposta pelo mark propositalmente. Porém, há uma pequena correção (pelo menos por 1.2) que permite que o attack speed seja manipulado na casa de milisegundos.

 

olha, eu testei um código de attack speed que funcionou em 0.4, aqui:

uint32_t Player::getAttackSpeed() const
{
	int32_t SpeedAttack;
	SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10);

	if (SpeedAttack < 500) {
		return 500;
	} else {
		return (uint32_t) SpeedAttack;
	}
} 
SkullsS
23 de março de 2016 às 21:59

 

 

olha, eu testei um código de attack speed que funcionou em 0.4, aqui:

uint32_t Player::getAttackSpeed() const
{
	int32_t SpeedAttack;
	SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10);

	if (SpeedAttack < 500) {
		return 500;
	} else {
		return (uint32_t) SpeedAttack;
	}
} 

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

 

 

olha, eu testei um código de attack speed que funcionou em 0.4, aqui:

uint32_t Player::getAttackSpeed() const
{
	int32_t SpeedAttack;
	SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10);

	if (SpeedAttack < 500) {
		return 500;
	} else {
		return (uint32_t) SpeedAttack;
	}
} 

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

ClarymC
23 de março de 2016 às 22:02

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

 

aaah certo, entendi agora. Mas assim, preciso mais desse código pelo atributo do item... Então isso não seria algo tão absurdo

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

 

Você não entendeu, funcionar funciona. Mas ele só vai alterar o attackspeed de seg em seg.. Você ter 1500 de attspeed (teoricamente 1 tapa a cada 1.5 segundos) é exatamente igual a ter 2000, assim como ter 100 é exatamente igual a ter 1000. No TFS originalmente não tem segundo quebrado para ataque speed.

 

aah sim, entendi. Mas eu quero mesmo pelo atributo do item... Então isso não seria algo tão terrível

SkullsS
23 de março de 2016 às 22:07

 

aaah certo, entendi agora. Mas assim, preciso mais desse código pelo atributo do item... Então isso não seria algo tão absurdo

Considerando que 3000 de attackspeed é igual a 1 tapa a cada TRÊS segundos, algo já absurdamente lento, você tem no máximo 3 níveis de ataque speed, o que não justifica usar ataque speed ahuehuaehuae. Considerando que o attspeed base padrão das vocações normalmente é 1500, cai para 2 o número.

ClarymC
23 de março de 2016 às 22:10

Considerando que 3000 de attackspeed é igual a 1 tapa a cada TRÊS segundos, algo já absurdamente lento, você tem no máximo 3 níveis de ataque speed, o que não justifica usar ataque speed ahuehuaehuae. Considerando que o attspeed base padrão das vocações normalmente é 1500, cai para 2 o número.

Realmente, olhando assim uheuehe Mas da pra adaptar o código?

SkullsS
23 de março de 2016 às 22:11

Então, um amigo meu falou que nas versões antigas o tfs atualizava o attspeed de 500ms em 500ms, o que torna mais viavel uma alteração assim, ainda que bem tosco. Acredito que dê pra adaptar o codigo sim, so nao vou conseguir olhar nesse exato momento o que ta errado.

ClarymC
25 de março de 2016 às 13:20

Então, um amigo meu falou que nas versões antigas o tfs atualizava o attspeed de 500ms em 500ms, o que torna mais viavel uma alteração assim, ainda que bem tosco. Acredito que dê pra adaptar o codigo sim, so nao vou conseguir olhar nesse exato momento o que ta errado.

 

Ah sim, tudo bem. Da uma olhada quando você tiver um tempo livro então...

up